package LimitedTimeGame.Day_0213;

/**
 * @author zxc
 * @date 2023/02/13 20:02
 **/

import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;

/**
 * 题目 ：反转之后的数字和
 * 题目详述 ：
 * 给你一个 非负 整数 num 。
 * 如果存在某个 非负 整数 k 满足 k + reverse(k) = num ，则返回 true ；否则，返回 false 。
 * reverse(k) 表示 k 反转每个数位后得到的数字。
 *
 * 提示：
 * 0 <= num <= 105
 *
 */
public class SumOfNumberAndReverse {
    /**
     * 思路 ：
     * 1.笨方法 ：
     * ===> 充分利用队列先进先出的特点，实现对于某个数字的翻转;
     * （1）即，首先将遍历所有数字k，同时对其进行翻转;
     * （2）然后，判断是否k + reverse(k) == num;
     * @param num
     * @return
     */
    public boolean sumOfNumberAndReverse(int num) {
        Queue<Integer> queue = new LinkedList<>();
        for(int i = 0 ; i <= num ; i++){
            int temp = i;
            while(temp != 0){
                queue.offer(temp % 10);
                temp /= 10;
            }
            int reverse = 0;
            while(!queue.isEmpty()){
                Integer pop = queue.poll();
                reverse = reverse * 10 + pop;
            }
            if(i + reverse == num){
                System.out.println(reverse);
                return true;
            }
        }
        return false;
    }
}
